package byggeTegning.geometry;

//import DEBUGGING.*;  // Search for DEBUG.<INFO|TRACE| ... >

import javax.media.j3d.Appearance;
import javax.media.j3d.Shape3D;
import javax.vecmath.Color3f;
import javax.vecmath.Point3f;


// ********************************************************************
// *** CLASS: PolyShape
// ********************************************************************
public class PolyShape extends TransformedGroup3D
{

  // ******************************************************************
  // *** CONTRUCTOR: PolyShape
  // ******************************************************************
  public PolyShape(Color3f c,Point3f[] front,Point3f[] back)
  { Appearance app=Object3D.createAppearance(8,c);

    Shape3D body=new PolyBody(back,front);
    body.setAppearance(app);
    this.addChild(body);

    Shape3D frontEnd=new byggeTegning.geometry.Polygon(front);
    frontEnd.setAppearance(app);
    this.addChild(frontEnd);

    Shape3D backEnd=new byggeTegning.geometry.Polygon(back);
    backEnd.setAppearance(app);
    this.addChild(backEnd);
  }

  // ******************************************************************
  // *** METHOD: setDirectionNorthSouth
  // ******************************************************************
  public void setDirectionNorthSouth()
  { setAngleX(0.0); setAngleY(0.0); setAngleZ(0.0); }

  // ******************************************************************
  // *** METHOD: setDirectionEastWest
  // ******************************************************************
  public void setDirectionEastWest()
  { setAngleX(0.0); setAngleY(Math.PI/2); setAngleZ(0.0); }

//  // ******************************************************************
//  // *** METHOD: setDirection
//  // ******************************************************************
//  public void setDirection(Point3D p1,Point3D p2)
//  {
//    //    atan2Tester();
//
//    double dx=p2.x-p1.x;
//    double dy=p2.y-p1.y;
//    double dz=p2.z-p1.z;
//
//    //    double vz=Math.atan2(dy,dx);
//    //  //    double vz=Math.atan2(-dx,dy);
//
//    //    double vx=Math.atan2(dy,dz);
//    double vX=Math.atan2(-dy,dz);
//
//    //    double vy=Math.atan2(dx,dz);
//    double vY=Math.atan2(dx,dz);
//
//    //    DEBUG.INFO("***SET DIRECTION: dx="+dx+",dy="+dy+",dz="+dz);
//    //    DEBUG.INFO("***SET DIRECTION: vX="+vX+",vY="+vY);//+",vz="+vz);
//
//    setAngleX(vX);
//    setAngleY(vY);
//    //    setAngleZ(vz);
//  }
//
//  private void atan2Test(double a,double b)
//  { double v=Math.atan2(a,b);
//    DEBUG.INFO("*** v=ATAN2(a,b)/pi *** a="+a+", b="+b+", v="+v/Math.PI);
//  }
//  private void atan2Tester()
//  {
//    atan2Test(0,1);
//    atan2Test(1,1);
//    atan2Test(1,0);
//    atan2Test(1,-1);
//    atan2Test(0,-1);
//    atan2Test(-1,-1);
//    atan2Test(-1,0);
//    atan2Test(-1,1);
//    atan2Test(0,1);
//  }


}